/*
 * To change this template, choose Tools | Templates
 * AND open the template in the editor.
 */

package modelos;

import java.lang.String;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.LinkedList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author usuario
 */
public class ModeloProducto extends ConexionDB{

    private String id,descripcion,id_cat,estatus;
    private float precio;

    public ModeloProducto(){
            super();
    }

    public boolean registar(){
        conectar();
        boolean sw = false;
        String tira="INSERT INTO Producto (id, id_cat, descripcion, precio , estatus ) VALUES('"+getId()+"','"+getId_cat()+"','"+getDescripcion()+"',"+getPrecio()+",'A')";
        try {
             Statement stam = conexion.createStatement();
             stam.execute(tira);
            sw= true;
        } catch (SQLException ex) {
                Logger.getLogger(ModeloProducto.class.getName()).log(Level.SEVERE, null, ex);
            
             sw= false;
        }
        desconectar();
        return sw;
    }
    

    public void registarIngredientes(LinkedList<String> ids,LinkedList<Float> cantidades){
        conectar();
        for (int i = 0; i < cantidades.size(); i++){
            String tira="INSERT INTO IngredienteEnProducto (id_pro,id_ing, cantidad ) VALUES('"+getId()+"','"+ids.get(i)+"',"+cantidades.get(i)+")";
            try {
                 Statement stam = conexion.createStatement();
                stam.execute(tira);
            } catch (SQLException ex) {
                Logger.getLogger(ModeloProducto.class.getName()).log(Level.SEVERE, null, ex);
            }
        }        
        desconectar();
    }


  public LinkedList<ModeloProducto> listar(){
    LinkedList<ModeloProducto> v = new LinkedList<ModeloProducto>();
    String tira="SELECT * FROM Producto WHERE estatus='A'";
    conectar();
    try {
        Statement stam = conexion.createStatement();
        ResultSet rs =        stam.executeQuery(tira);
        
        while (rs.next()){
            ModeloProducto  i = new ModeloProducto();
            i.setDescripcion(rs.getString("descripcion"));
            i.setId(rs.getString("id"));
            i.setPrecio(rs.getFloat("precio"));
            i.setEstatus(rs.getString("estatus"));
            i.setId_cat(rs.getString("id_cat"));
            v.add(i);
         }
    } catch (SQLException ex) {
        Logger.getLogger(ModeloProducto.class.getName()).log(Level.SEVERE, null, ex);
    }
    return v;
  }

  public LinkedList<String []> ingredientesMasUsados(){
    LinkedList<String []> v = new LinkedList<String []>();
    String tira="SELECT cantidades , descripcion , id FROM  Ingrediente,(SELECT SUM(cantidad) AS cantidades,id_ing AS cod FROM IngredienteEnProducto  GROUP BY id_ing) Suma WHERE Ingrediente.id=Suma.cod ORDER BY cantidades ";
    conectar();
    try {
        Statement stam = conexion.createStatement();
        ResultSet rs =        stam.executeQuery(tira);
        
        while (rs.next()){
            String [] s = {rs.getString("descripcion"), ""+rs.getFloat("cantidades"), ""+rs.getInt("id")};
            v.add(s);
        }
  } catch (SQLException ex) {
        Logger.getLogger(ModeloProducto.class.getName()).log(Level.SEVERE, null, ex);
    }
    return v;
  }

  public LinkedList<String []> listarIngredientes(){
    LinkedList<String []> v = new LinkedList<String []>();
    conectar();
    String tira="SELECT Ingrediente.descripcion, IngredienteenProducto.cantidad  FROM Ingrediente, Producto,IngredienteenProducto where Ingrediente.estatus='A' AND IngredienteenProducto.estatus='A' AND Producto.estatus='A' AND Producto.id=IngredienteenProducto.id_pro AND Ingrediente.id=IngredienteenProducto.id_ing Producto.id='"+getId()+"'";
    try {
        Statement stam = conexion.createStatement();
        ResultSet rs =        stam.executeQuery(tira);
        
        while (rs.next()){
            String [] s = {rs.getString(1), ""+rs.getFloat(2)};
            v.add(s);
        }
    } catch (SQLException ex) {
        Logger.getLogger(ModeloProducto.class.getName()).log(Level.SEVERE, null, ex);
    }
    return v;
  }

  
  public LinkedList<String []> listarVentas(){
    LinkedList<String []> v = new LinkedList<String []>();
    String tira="SELECT descripcion, (precio*total.cantidad), total.cantidad, id FROM  Producto, (SELECT sum(IngredienteenProducto.cantidad) as cantidad, IngredienteenProducto.id_pro AS id_total FROM IngredienteenProducto  GROUP BY IngredienteenProducto.id_pro) total WHERE total.id_total=id AND estatus='A' ORDER BY(total.cantidad,(precio*total.cantidad))";
    conectar();
    try{
        Statement stam = conexion.createStatement();
        ResultSet rs =        stam.executeQuery(tira);
        
        while (rs.next()){
            String [] s = {rs.getString(1), ""+rs.getFloat(2), ""+rs.getInt(3),rs.getString(4)};
            v.add(s);
        }
    } catch (SQLException ex) {
        Logger.getLogger(ModeloProducto.class.getName()).log(Level.SEVERE, null, ex);
    }
    return v;
  }

   public boolean revisarDisponibilidadIngredientes(){
    LinkedList<ModeloIngrediente> v = new LinkedList<ModeloIngrediente>();
    LinkedList<Float> f = new LinkedList<Float>();
    String tira="SELECT Ingrediente.id,IngredienteenProducto.cantidad FROM  Ingrediente,IngredienteenProducto,Producto WHERE Ingrediente.estatus='A'  AND Producto.estatus='A' AND Ingrediente.id=IngredienteenProducto.id_ing AND Producto.id=IngredienteenProducto.id_pro AND Producto.id='"+getId()+"'";
    conectar();
    try{
        Statement stam = conexion.createStatement();
        ResultSet rs =        stam.executeQuery(tira);
        
        while(rs.next()){
            ModeloIngrediente  i = new ModeloIngrediente();
            i.setID(rs.getString(1));
            f.add(rs.getFloat(2));
            v.add(i);
         }
     } catch (SQLException ex) {
            Logger.getLogger(ModeloIngrediente.class.getName()).log(Level.SEVERE, null, ex);
     }
     desconectar();
     for (int i = 0; i < v.size(); i++){
         if(!(v.get(i).revisarStock(f.get(i)))){
             return false;
         }
     }
     return true;
  }

 public void disminuirStockIngredientes(){
    LinkedList<ModeloIngrediente> v = new LinkedList<ModeloIngrediente>();
    LinkedList<Float> f = new LinkedList<Float>();
    String tira="SELECT Ingrediente.id,IngredienteenProducto.cantidad FROM  Ingrediente,IngredienteenProducto,Producto WHERE Ingrediente.estatus='A' AND Producto.estatus='A' AND Ingrediente.id=IngredienteenProducto.id_ing AND Producto.id=IngredienteenProducto.id_pro AND Producto.id='"+getId()+"'";
     System.out.println(tira);
    conectar();
    try{
        Statement stam = conexion.createStatement();
        ResultSet rs =        stam.executeQuery(tira);
        
        while(rs.next()){
            ModeloIngrediente  i = new ModeloIngrediente();
            i.setID(rs.getString(1));
            f.add(rs.getFloat(2));
            v.add(i);
         }
     } catch (SQLException ex) {
            Logger.getLogger(ModeloIngrediente.class.getName()).log(Level.SEVERE, null, ex);
     }
     desconectar();
     for (int i = 0; i < v.size(); i++){

         v.get(i).consultar();
         v.get(i).setStock(v.get(i).getStock()-f.get(i));
         v.get(i).disminuirStock();
     }
  }

   


    public String getDescripcion() {
        return descripcion;
    }

    public void setDescripcion(String descripcion) {
        this.descripcion = descripcion;
    }

    public float getPrecio() {
        return precio;
    }

    public void setPrecio(float precio) {
        this.precio = precio;
    }

    public String getEstatus() {
        return estatus;
    }

    public void setEstatus(String estatus) {
        this.estatus = estatus;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getId_cat() {
        return id_cat;
    }

    public void setId_cat(String id_cat) {
        this.id_cat = id_cat;
    }

    

    



}
